package net.hn.hnms.biz.common.activiti.builder;


import net.hn.hnms.biz.common.activiti.service.ProcessApiService;

/**
 * Created on 2022/8/5.
 *
 * @author ly
 * @desc: 流程定义信息操作执行器
 */
public class ProcessDefinitionExecutor {

    //流程定义记录id
    private String processDefinitionId;
    private ProcessApiService processApiService;


    private ProcessDefinitionExecutor() {
    }

    public ProcessDefinitionExecutor(ProcessApiService processApiService) {
        this.processApiService = processApiService;
    }


    /**
     * 创建流程定义信息查询器
     * @return ProcessDefinitionQuery 流程定义信息查询器
     */
    public ProcessDefinitionQuery createDefinitionQuery() {
        return new ProcessDefinitionQuery(this.processApiService);
    }

    /**
     * 设置流程定义记录id
     * @param processDefinitionId 流程定义记录id
     * @return ProcessDefinitionExecutor 流程定义信息操作执行器
     */
    public ProcessDefinitionExecutor processDefinitionId(String processDefinitionId) {
        this.processDefinitionId = processDefinitionId;
        return this;
    }


    /**
     * 创建流程
     * @return ProcessDefinitionCreator 流程定义信息创建器
     */
    public ProcessDefinitionCreator createProcess() {
        return new ProcessDefinitionCreator();
    }

    /**
     * 创建流程节点
     * @return ProcessNodeDefinitionCreator 流程节点信息创建器
     */
    public ProcessNodeDefinitionCreator createProcessNode() {
        return new ProcessNodeDefinitionCreator();
    }

    /**
     * 创建流程步骤
     * @return ProcessStepDefinitionCreator 流程步骤信息创建器
     */
    public ProcessStepDefinitionCreator createProcessStep() {
        return new ProcessStepDefinitionCreator();
    }

    /**
     * 暂停流程
     */
    public void suspendProcessDefinition() {
        processApiService.suspendProcessDefinition(processDefinitionId);
    }

    /**
     * 激活流程
     */
    public void activateProcessDefinition() {
        processApiService.activateProcessDefinition(processDefinitionId);
    }
}
